home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / Tools / vg-2.03 / video / copypixels.s < prev    next >
Encoding:
Text File  |  1995-05-03  |  4.0 KB  |  241 lines

  1. /
  2. / Copyright (C) 1990-1992 Michael Davidson.
  3. / All rights reserved.
  4. /
  5. / Permission to use, copy, modify, and distribute this software
  6. / and its documentation for any purpose and without fee is hereby
  7. / granted, provided that the above copyright notice appear in all
  8. / copies and that both that copyright notice and this permission
  9. / notice appear in supporting documentation.
  10. /
  11. / This software is provided "as is" without express or implied warranty.
  12. /
  13.     .text
  14.  
  15. R32Lookup    =    0
  16. G32Lookup    =    1024
  17. B32Lookup    =    2048
  18.  
  19. /
  20. / GammaCopyPixels24to24(
  21. /    pixel24_t    *src24,
  22. /    pixel24_t    *dst24,
  23. /    int        count
  24. /    )
  25. /
  26.     .globl    GammaCopyPixels24to24
  27.  
  28. SRC24    =    8
  29. DST24    =    12
  30. COUNT    =    16
  31.  
  32. GammaCopyPixels24to24:
  33.     pushl  %ebp
  34.     movl   %esp, %ebp
  35.     pushl  %esi
  36.     pushl  %edi
  37.     pushl  %ebx
  38.  
  39.     movl   SRC24(%ebp), %esi
  40.     movl   DST24(%ebp), %edi
  41.     shrl   $2, COUNT(%ebp)
  42.  
  43.     xorl   %ebx,%ebx
  44.     xorl   %edx,%edx
  45.  
  46.     jmp    L01
  47.  
  48.     .align    4
  49. L00:
  50.     xorl   %eax, %eax
  51.     xorl   %ecx, %ecx
  52.  
  53.     movb   (%esi), %al        / R(0)
  54.     movb   1(%esi), %bl        / G(0)
  55.  
  56.     movb   3(%esi), %cl        / R(1)
  57.     movb   4(%esi), %dl        / G(1)
  58.  
  59.     movl   RGB32Lookup+R32Lookup(,%eax,4), %eax
  60.     movl   RGB32Lookup+R32Lookup(,%ecx,4), %ecx
  61.     orl    RGB32Lookup+G32Lookup(,%ebx,4), %eax
  62.     orl    RGB32Lookup+G32Lookup(,%edx,4), %ecx
  63.  
  64.     movb   2(%esi), %bl        / B(0)
  65.     movb   5(%esi), %dl        / B(1)
  66.  
  67.     orl    RGB32Lookup+B32Lookup(,%ebx,4), %eax
  68.     orl    RGB32Lookup+B32Lookup(,%edx,4), %ecx
  69.  
  70.     rorl   $8, %ecx
  71.     movw   %cx, 0x4(%edi)
  72.     xorw   %cx, %cx
  73.     orl    %ecx, %eax
  74.     movl   %eax, (%edi)
  75.  
  76.     xorl   %eax, %eax
  77.     xorl   %ecx, %ecx
  78.  
  79.     movb   6(%esi), %al        / R(2)
  80.     movb   7(%esi), %bl        / G(2)
  81.  
  82.     movb   9(%esi), %cl        / R(3)
  83.     movb   10(%esi),%dl        / G(3)
  84.  
  85.     movl   RGB32Lookup+R32Lookup(,%eax,4), %eax
  86.     movl   RGB32Lookup+R32Lookup(,%ecx,4), %ecx
  87.     orl    RGB32Lookup+G32Lookup(,%ebx,4), %eax
  88.     orl    RGB32Lookup+G32Lookup(,%edx,4), %ecx
  89.  
  90.     movb   8(%esi), %bl        / B(2)
  91.     movb   11(%esi),%dl        / B(3)
  92.  
  93.     orl    RGB32Lookup+B32Lookup(,%ebx,4), %eax
  94.     orl    RGB32Lookup+B32Lookup(,%edx,4), %ecx
  95.  
  96.     movw   %ax, 6(%edi)
  97.     shll   $8,  %ecx
  98.     shrl   $16, %eax
  99.     movb   %al, %cl
  100.     movl   %ecx, 8(%edi)
  101.  
  102.     leal   12(%esi), %esi
  103.     leal   12(%edi), %edi
  104.  
  105. L01:
  106.     decl   COUNT(%ebp)
  107.     jge    L00
  108.  
  109.     popl   %ebx
  110.     popl   %edi
  111.     popl   %esi
  112.     popl   %ebp
  113.     ret    
  114.  
  115. /
  116. / GammaCopyPIxels24to16(
  117. /    pixel24_t    *src24,
  118. /    pixel24_t    *dst16,
  119. /    int        count
  120. /    )
  121. /
  122.     .globl    GammaCopyPixels24to16
  123.  
  124. SRC24    =    8
  125. DST16    =    12
  126. COUNT    =    16
  127.  
  128. GammaCopyPixels24to16:
  129.     pushl  %ebp
  130.     movl   %esp, %ebp
  131.     pushl  %esi
  132.     pushl  %edi
  133.     pushl  %ebx
  134.  
  135.     movl   SRC24(%ebp), %esi
  136.     movl   DST16(%ebp), %edi
  137.     shrl   $1, COUNT(%ebp)
  138.  
  139.     xorl   %eax, %eax
  140.     xorl   %ebx, %ebx
  141.     xorl   %ecx, %ecx
  142.     xorl   %edx, %edx
  143.     jmp    L21
  144.  
  145.     .align    4
  146. L20:
  147.     movb   (%esi), %al
  148.     movb   1(%esi), %bl
  149.     movb   2(%esi), %cl
  150.  
  151.     movw   RGB32Lookup+R32Lookup(,%eax,4), %dx
  152.     orw    RGB32Lookup+G32Lookup(,%ebx,4), %dx
  153.     orw    RGB32Lookup+B32Lookup(,%ecx,4), %dx
  154.  
  155.     roll   $16, %edx
  156.  
  157.     movb   3(%esi), %al
  158.     movb   4(%esi), %bl
  159.     movb   5(%esi), %cl
  160.  
  161.     movw   RGB32Lookup+R32Lookup(,%eax,4), %dx
  162.     orw    RGB32Lookup+G32Lookup(,%ebx,4), %dx
  163.     orw    RGB32Lookup+B32Lookup(,%ecx,4), %dx
  164.  
  165.     roll   $16, %edx
  166.     movl   %edx, (%edi)
  167.  
  168.     leal   6(%esi), %esi
  169.     leal   4(%edi), %edi
  170. L21:
  171.     decl   COUNT(%ebp)
  172.     jge    L20
  173.  
  174.     popl   %ebx
  175.     popl   %edi
  176.     popl   %esi
  177.     popl   %ebp
  178.     ret    
  179.  
  180. /
  181. / CopyPixels24to8(
  182. /    pixel24_t    *src24,
  183. /    pixel8_t    *dst8,
  184. /    int        count,
  185. /    pixel8_t    *lookup
  186. /    )
  187. /
  188.     .globl    CopyPixels24to8
  189.  
  190. SRC24    =    8
  191. DST8    =    12
  192. COUNT    =    16
  193. LOOKUP    =    20
  194.  
  195. CopyPixels24to8:
  196.     pushl  %ebp
  197.     movl   %esp, %ebp
  198.     pushl  %esi
  199.     pushl  %edi
  200.     pushl  %ebx
  201.  
  202.     movl   SRC24(%ebp), %esi
  203.     movl   DST8(%ebp),%edi
  204.     movl   LOOKUP(%ebp),%ebx
  205.     movl   COUNT(%ebp),%ecx
  206.     shrl   %ecx
  207.     jmp    L31
  208.     nop
  209.     nop
  210.  
  211.     .align    4
  212. L30:
  213.     xorl   %eax, %eax
  214.     xorl   %edx, %edx
  215.     movb   (%esi), %al
  216.     movb   3(%esi), %dl
  217.     shll   $5, %eax
  218.     shll   $5, %edx
  219.     movb   1(%esi), %al
  220.     movb   4(%esi), %dl
  221.     shll   $5, %eax
  222.     shll   $5, %edx
  223.     movb   2(%esi), %al
  224.     movb   5(%esi), %dl
  225.     shrl   $3, %eax
  226.     shrl   $3, %edx
  227.     movb   (%ebx,%eax,1), %al
  228.     movb   (%ebx,%edx,1), %ah
  229.     movw   %ax, (%edi)
  230.     leal   6(%esi), %esi
  231.     leal   2(%edi), %edi
  232. L31:
  233.     decl   %ecx
  234.     jge    L30
  235.  
  236.     popl   %ebx
  237.     popl   %edi
  238.     popl   %esi
  239.     popl   %ebp
  240.     ret    
  241.